package com.pearadmin.modules.sys.service.impl;

import cn.hutool.core.bean.BeanUtil;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.pearadmin.common.tools.SequenceUtil;
import com.pearadmin.common.web.domain.request.PageDomain;
import com.pearadmin.modules.sys.domain.PoleInfo;
import com.pearadmin.modules.sys.domain.SlotInfo;
import com.pearadmin.modules.sys.domain.dto.SlotInfoDto;
import com.pearadmin.modules.sys.mapper.PoleInfoMapper;
import com.pearadmin.modules.sys.mapper.SlotInfoMapper;
import com.pearadmin.modules.sys.service.ISlotInfoService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.time.LocalDateTime;
import java.util.List;

/**
 * 槽号信息Service业务层处理
 *
 * @author Mr.Ling
 * @date 2021-11-27
 */
@Service
public class SlotInfoServiceImpl implements ISlotInfoService {
    @Autowired
    private SlotInfoMapper slotInfoMapper;

    /**
     * 查询槽号信息
     *
     * @param id 槽号信息ID
     * @return 槽号信息
     */
    @Override
    public SlotInfo selectSlotInfoById(String id) {
        return slotInfoMapper.selectSlotInfoById(id);
    }

    /**
     * 查询槽号信息列表
     *
     * @param slotInfo 槽号信息
     * @return 槽号信息
     */
    @Override
    public List<SlotInfo> selectSlotInfoList(SlotInfo slotInfo) {
        return slotInfoMapper.selectSlotInfoList(slotInfo);
    }

    /**
     * 查询槽号信息
     *
     * @param slotInfo   槽号信息
     * @param pageDomain
     * @return 槽号信息 分页集合
     */
    @Override
    public PageInfo<SlotInfo> selectSlotInfoPage(SlotInfo slotInfo, PageDomain pageDomain) {
        PageHelper.startPage(pageDomain.getPage(), pageDomain.getLimit());
        List<SlotInfo> data = slotInfoMapper.selectSlotInfoList(slotInfo);
        return new PageInfo<>(data);
    }

    /**
     * 新增槽号信息 和 极号信息
     *
     * @param slotInfo 槽号信息
     * @return 结果
     */

    @Autowired
    private PoleInfoMapper poleInfoMapper;

    @Override
    public int insertSlotInfo(SlotInfoDto dto)  {
        int startSlotNo = dto.getStartSlotNo();
        int endSlotNo = dto.getEndSlotNo();
        int poles = dto.getPoles();
        if (startSlotNo>endSlotNo) {
            return 0;
        }
        for (int i = startSlotNo; i <= endSlotNo; i++) {
            SlotInfo slotInfo = BeanUtil.copyProperties(dto, SlotInfo.class);
            slotInfo.setId( SequenceUtil.makeStringId());
            slotInfo.setSlotNo(i+"");
            for (int j = 1; j < poles + 1; j++) {
                PoleInfo poleInfo = new PoleInfo();
                poleInfo.setSlotNo(slotInfo.getSlotNo());
                poleInfo.setCreateTime(LocalDateTime.now());
                poleInfo.setCreateBy(dto.getCreateBy());
                poleInfo.setCreateName(dto.getCreateName());
                // 保存 A测的阳极
                poleInfo.setPoleNo("A" + String.format("%02d", j));
                poleInfo.setId(SequenceUtil.makeStringId());
                poleInfo.setSlotId(slotInfo.getId());
                poleInfoMapper.insertPoleInfo(poleInfo);
                // 保存 B侧的阳极
                poleInfo.setPoleNo("B" + String.format("%02d", j));
                poleInfo.setId(SequenceUtil.makeStringId());
                poleInfoMapper.insertPoleInfo(poleInfo);
            }
            slotInfoMapper.insertSlotInfo(slotInfo);
        }
        return 1;
    }

    /**
     * 修改槽号信息
     *
     * @param slotInfo 槽号信息
     * @return 结果
     */
    @Override
    public int updateSlotInfo(SlotInfo slotInfo) {
        return slotInfoMapper.updateSlotInfo(slotInfo);
    }

    /**
     * 删除槽号信息对象
     *
     * @param ids 需要删除的数据ID
     * @return 结果
     */
    @Override
    public int deleteSlotInfoByIds(String[] ids) {
        return slotInfoMapper.deleteSlotInfoByIds(ids);
    }

    /**
     * 删除槽号信息信息
     *
     * @param id 槽号信息ID
     * @return 结果
     */
    @Override
    public int deleteSlotInfoById(String id) {
        return slotInfoMapper.deleteSlotInfoById(id);
    }
}
